Visual methods for exploring multivariate spatio-temporal networks with application to health transport

Confirmation Report

Author

Krisanat Anukarnsakulchularp

Background

Analysing spatio-temporal network data is a contemporary research problem that has gained increasing interest in the health field, particularly within emergency medical services (EMS) and ambulance transfer systems.  Such data capture spatial, temporal, and often multivariate information. The spatial component generally represents geographic locations or spatial geometries, while the temporal component records time-related information through timestamps or time intervals (Rao, Govardhan, and Rao 2012). In addition, the underlying network structure creates connections and multivariate dependencies between locations and transfers. While techniques exist to analyse spatial and temporal components separately, performing analysis, and perhaps more importantly, exploring these components in conjunction with the network structure, remains an open challenge.

Older individuals often require continuous support, including 24-hour care, assistance with daily tasks, and ongoing medical supervision. Thus, many reside in the residential aged care facilities (RACFs), which are specifically designed to provide this comprehensive care (Kearney and Winterbottom 2006). RACFs frequently rely on the ambulance services to facilitate the transfers of an individual to the hospital for both acute emergencies and planned/scheduled medical appointments. This rise in the number of transfers is partly due to population ageing (Harris and Sharma 2018), which puts incredible pressure on emergency medical services, where delay could lead to an increase in health risk (Harmsen et al. 2015). During the COVID-19 pandemic, lockdown measures and movement restrictions further disrupted the delivery of emergency services. The effects of lockdowns and rising transfer demand highlight the need for further analysis to improve the planning and utilisation of ambulance services.

To gain insight into transfer patterns, data exploration using network representations linking RACFs and hospitals provides a powerful framework. However, most network research focuses primarily on topological properties, often treating them homogeneously and overlooking other important information, such as the association between variables (Cardenas et al. 2021; Fernández-Gracia et al. 2017). While network representation is suited to transfer data, overemphasising network topology can neglect the fundamental principles of data exploration. These limitations arise from the practical challenges of working with spatio-temporal network data, including data cleaning methods, particularly temporal information, the ease of data wrangling and subsetting, and the challenges of visualisation and inference. As a result, simple informative analyses, such as examining variable distributions, temporal trends, or bivariate relationships, are often underutilised, despite the ability to reveal key insights of the data. This underlines the need for an infrastructure that integrates network-based approaches with exploratory data analysis, enabling a comprehensive exploration of spatio-temporal transfer networks.

Studying how infectious diseases spread throughout the network (transfer between RACFs and hospitals) is important because the older population tend to face a higher risk of mortality during the outbreaks (Parohan et al. 2020). These patient transfers between facilities create ways for the disease to be transmitted across the systems, leading to rapid spread. Traditional compartmental infectious disease models assuming homogeneous or static structure do not adequately capture networks that change over time. In reality, ambulance transfers are highly dynamic, where these connections between facilities can change in response to the demand, constraints, and even outbreak conditions. Understanding these transmission dynamics is therefore crucial for devising effective policies to limit spread as well as identify high-risk facilities, critical transfer connections, and exposed periods.

Project 1: Developing Infrastructure for Exploratory Analysis of Multivariate Spatio-temporal Network

Part A: A Multivariate Spatio-Temporal Network Data Exploration Framewok

As multivariate spatio-temporal network data become more accessible and complex, understanding their structure and dynamics is key to effective decision-making. A major challenge with the analysis of large multivariate networks is the amount of information they contain, most of which is overlooked. By integrating exploratory data analysis (EDA) with network-based representations, the framework aims to support an examination of associations between variables, temporal changes, and structural differences within the network. Throughout this framework, a seamless integration of the following key processes is needed: data storage, cleaning, subsetting, visualisation, and visual inference. The following section, therefore, reviews existing tools that support these processes and discusses their limitations.

Data Storage and Cleaning

Data cleaning is the first stage of a reliable analysis. Spatio-temporal data usually need to be checked for inconsistency of the temporal records, duplicated records, and spatial inaccuracies. Now, adding the network structure on top of that, such as nodes, edges, and their attributes, requires the network topology to be kept throughout the process. Typically, this stage involves tools such as dplyr (Wickham et al. 2023) for manipulating the data, tsibble (Wang, Cook, and Hyndman 2020) for validating the temporal inconsistency, sf (Pebesma 2018) for checking the coordinate inaccuracies, and igraph/network Butts (2008) for keeping the network structure.

The tidygraph (Pedersen 2024b) package provides a tidy API for graph and network manipulation, where network data are thought of as two tidy tables, one for node and one for edge data. In tidy data (Wickham 2014), each variable has its own column, each observation has its own row, and each value has its own cell. These tables are then stored together within a tbl_graph object, which preserves the underlying network topology while allowing standard dplyr verbs to be applied. The interaction between node and edge tables is done through the use of a special function, activate(), which allows the user to switch between the two tables and apply dplyr operations such as mutate(), group_by(), and join operations.

There are two main functions for creating tbl_graph object, as_tbl_graph() and tbl_graph(). The first function as_tbl_graph() takes in a different class of objects, such as data.frame, igraph, and network, then turns it into a tbl_graph object. While tbl_graph() takes in two data.frame objects, one for node and one for edge.

as_tbl_graph(edges)
# A tbl_graph: 815 nodes and 4692 edges
#
# A directed acyclic simple graph with 2 components
#
# Node Data: 815 × 1 (active)
   name                         
   <chr>                        
 1 1 ABERDEEN STREET RESERVOIR  
 2 1 ADENEY STREET CAMPERDOWN   
 3 1 AITKEN AVENUE DONALD       
 4 1 CARINYA CRESCENT KORUMBURRA
 5 1 CHESTNUT ROAD DOVETON      
 6 1 CHIVERS ROAD TEMPLESTOWE   
 7 1 CLAYTON ROAD BALWYN        
 8 1 COBB ROAD MOUNT ELIZA      
 9 1 ELEANOR STREET HEYFIELD    
10 1 FOLEY STREET TERANG        
# ℹ 805 more rows
#
# Edge Data: 4,692 × 8
   from    to weight long_hosp lat_hosp long_racf lat_racf category
  <int> <int>  <dbl>     <dbl>    <dbl>     <dbl>    <dbl> <chr>   
1     1   628      1      145.    -37.8      145.    -37.7 RACF    
2     1   629    218      145.    -37.8      145.    -37.7 RACF    
3     1   630      2      145.    -37.8      145.    -37.7 RACF    
# ℹ 4,689 more rows
tbl_graph(nodes, edges)
# A tbl_graph: 815 nodes and 4692 edges
#
# A directed acyclic simple graph with 2 components
#
# Node Data: 815 × 4 (active)
   name                          longitude latitude type 
   <chr>                             <dbl>    <dbl> <chr>
 1 1 ABERDEEN STREET RESERVOIR        145.    -37.7 racf 
 2 1 ADENEY STREET CAMPERDOWN         143.    -38.2 racf 
 3 1 AITKEN AVENUE DONALD             143.    -36.4 racf 
 4 1 CARINYA CRESCENT KORUMBURRA      146.    -38.4 racf 
 5 1 CHESTNUT ROAD DOVETON            145.    -38.0 racf 
 6 1 CHIVERS ROAD TEMPLESTOWE         145.    -37.8 racf 
 7 1 CLAYTON ROAD BALWYN              145.    -37.8 racf 
 8 1 COBB ROAD MOUNT ELIZA            145.    -38.2 racf 
 9 1 ELEANOR STREET HEYFIELD          147.    -38.0 racf 
10 1 FOLEY STREET TERANG              143.    -38.2 racf 
# ℹ 805 more rows
#
# Edge Data: 4,692 × 8
   from    to weight long_hosp lat_hosp long_racf lat_racf category
  <int> <int>  <dbl>     <dbl>    <dbl>     <dbl>    <dbl> <chr>   
1     1   628      1      145.    -37.8      145.    -37.7 RACF    
2     1   629    218      145.    -37.8      145.    -37.7 RACF    
3     1   630      2      145.    -37.8      145.    -37.7 RACF    
# ℹ 4,689 more rows

The difference between these two methods is that for the as_tbl_graph() function, it only needs the edges dataset, which means that all the multivariate information will only be on edge data and in the node data, it will only have the name (location). For the tbl_graph() function, the node variable can be explicitly stated, which can come in handy when there are attributes on the node dataset.

graph <- tbl_graph(nodes, edges)

graph |>
  activate(nodes) |>
  mutate(degree = centrality_degree(weights = weight))
# A tbl_graph: 815 nodes and 4692 edges
#
# A directed acyclic simple graph with 2 components
#
# Node Data: 815 × 5 (active)
   name                          longitude latitude type  degree
   <chr>                             <dbl>    <dbl> <chr>  <dbl>
 1 1 ABERDEEN STREET RESERVOIR        145.    -37.7 racf     445
 2 1 ADENEY STREET CAMPERDOWN         143.    -38.2 racf     103
 3 1 AITKEN AVENUE DONALD             143.    -36.4 racf       9
 4 1 CARINYA CRESCENT KORUMBURRA      146.    -38.4 racf      90
 5 1 CHESTNUT ROAD DOVETON            145.    -38.0 racf      17
 6 1 CHIVERS ROAD TEMPLESTOWE         145.    -37.8 racf     107
 7 1 CLAYTON ROAD BALWYN              145.    -37.8 racf     154
 8 1 COBB ROAD MOUNT ELIZA            145.    -38.2 racf       1
 9 1 ELEANOR STREET HEYFIELD          147.    -38.0 racf      12
10 1 FOLEY STREET TERANG              143.    -38.2 racf       2
# ℹ 805 more rows
#
# Edge Data: 4,692 × 8
   from    to weight long_hosp lat_hosp long_racf lat_racf category
  <int> <int>  <dbl>     <dbl>    <dbl>     <dbl>    <dbl> <chr>   
1     1   628      1      145.    -37.8      145.    -37.7 RACF    
2     1   629    218      145.    -37.8      145.    -37.7 RACF    
3     1   630      2      145.    -37.8      145.    -37.7 RACF    
# ℹ 4,689 more rows
graph |>
  activate(edges) |>
  mutate(centrality = centrality_edge_betweenness(weights = weight)) 
# A tbl_graph: 815 nodes and 4692 edges
#
# A directed acyclic simple graph with 2 components
#
# Edge Data: 4,692 × 9 (active)
    from    to weight long_hosp lat_hosp long_racf lat_racf category centrality
   <int> <int>  <dbl>     <dbl>    <dbl>     <dbl>    <dbl> <chr>         <dbl>
 1     1   628      1      145.    -37.8      145.    -37.7 RACF              1
 2     1   629    218      145.    -37.8      145.    -37.7 RACF              1
 3     1   630      2      145.    -37.8      145.    -37.7 RACF              1
 4     1   631      1      145.    -37.8      145.    -37.7 RACF              1
 5     1   632      1      145.    -37.8      145.    -37.7 RACF              1
 6     1   633      1      145.    -37.8      145.    -37.7 RACF              1
 7     1   634      2      145.    -37.8      145.    -37.7 RACF              1
 8     1   635     10      145.    -37.7      145.    -37.7 RACF              1
 9     1   636      1      145.    -37.8      145.    -37.7 RACF              1
10     1   637      2      145.    -37.8      145.    -37.7 RACF              1
# ℹ 4,682 more rows
#
# Node Data: 815 × 4
  name                        longitude latitude type 
  <chr>                           <dbl>    <dbl> <chr>
1 1 ABERDEEN STREET RESERVOIR      145.    -37.7 racf 
2 1 ADENEY STREET CAMPERDOWN       143.    -38.2 racf 
3 1 AITKEN AVENUE DONALD           143.    -36.4 racf 
# ℹ 812 more rows

For spatial networks, the sfnetworks package (van der Meer et al. 2024) extends tidygraph by allowing spatial geometries to be incorporated directly within the tbl_graph object. It is useful for dealing with complex geometry where edges are not straight-line connections, such as road or transport networks. The package also allows for the standard spatial operation within the sf package to be performed within the network context. For the temporal data structure provided by tsibble are not directly compatible with tidygraph objects. As a result, validating temporal consistency requires converting data back to a tsibble object or performing a temporal check prior to the creation of tbl_graph.

Data subsetting

Data subsetting is used to extract a subset of spatio-temporal network data based on spatial, temporal, and multivariate variables. This includes grouping data by time periods or regions, as well as filtering based on variable values and network characteristics (e.g., in-degree). In a network context, filtering operations need to account for topological dependencies between nodes and edges. When nodes are removed based on a condition, all edges incident to those nodes are also deleted (Figure 1). In contrast, when edges are removed, the nodes connected to those edges are preserved, since nodes can exist independently from an edge (Figure 2). The tidygraph supports these subsetting operations through the use of dplyr functions such as filter() and select(), which are applied separately on nodes and edges while maintaining the condition of the underlying network. Similarly to the data manipulation, users will need to switch between the node and edge tables to subset based on their attributes.

(a) Full network
(b) Node to be remove
(c) Filtered network
Figure 1: Node filtering
(a) Full network
(b) Edges to be remove
(c) Filtered network
Figure 2: Edge filtering
graph |>
  activate(nodes) |> 
  filter(type == "racf")
# A tbl_graph: 627 nodes and 0 edges
#
# A rooted forest with 627 trees
#
# Node Data: 627 × 4 (active)
   name                          longitude latitude type 
   <chr>                             <dbl>    <dbl> <chr>
 1 1 ABERDEEN STREET RESERVOIR        145.    -37.7 racf 
 2 1 ADENEY STREET CAMPERDOWN         143.    -38.2 racf 
 3 1 AITKEN AVENUE DONALD             143.    -36.4 racf 
 4 1 CARINYA CRESCENT KORUMBURRA      146.    -38.4 racf 
 5 1 CHESTNUT ROAD DOVETON            145.    -38.0 racf 
 6 1 CHIVERS ROAD TEMPLESTOWE         145.    -37.8 racf 
 7 1 CLAYTON ROAD BALWYN              145.    -37.8 racf 
 8 1 COBB ROAD MOUNT ELIZA            145.    -38.2 racf 
 9 1 ELEANOR STREET HEYFIELD          147.    -38.0 racf 
10 1 FOLEY STREET TERANG              143.    -38.2 racf 
# ℹ 617 more rows
#
# Edge Data: 0 × 8
# ℹ 8 variables: from <int>, to <int>, weight <dbl>, long_hosp <dbl>,
#   lat_hosp <dbl>, long_racf <dbl>, lat_racf <dbl>, category <chr>
graph |> 
  activate(edges) |> 
  select(-c(long_hosp:lat_racf)) |> 
  filter(weight > 100)
# A tbl_graph: 815 nodes and 277 edges
#
# A directed acyclic simple graph with 562 components
#
# Edge Data: 277 × 4 (active)
    from    to weight category
   <int> <int>  <dbl> <chr>   
 1     1   629    218 RACF    
 2     1   641    191 RACF    
 3     7   631    112 RACF    
 4    11   672    247 RACF    
 5    19   676    182 RACF    
 6    26   700    104 RACF    
 7    27   629    303 RACF    
 8    32   629    149 RACF    
 9    35   640    131 RACF    
10    39   662    140 RACF    
# ℹ 267 more rows
#
# Node Data: 815 × 4
  name                        longitude latitude type 
  <chr>                           <dbl>    <dbl> <chr>
1 1 ABERDEEN STREET RESERVOIR      145.    -37.7 racf 
2 1 ADENEY STREET CAMPERDOWN       143.    -38.2 racf 
3 1 AITKEN AVENUE DONALD           143.    -36.4 racf 
# ℹ 812 more rows

Network Sampling

Another important aspect of subsetting is understanding how sampling methods perform on network data. Read-world datasets are often not evenly distributed across multiple dimensions such as time, space, or variable groups. Some strata may contain more observations than others, and analysing these can directly impact the interpretation, as the larger group of strata may dominate the patterns seen. Sampling provides a way to pick the data while keeping it representative of the population. Stratified sampling, in particular, helps with an imbalance case by dividing the data into subgroups and sampling within each group, ensuring that all groups are represented in the sampled data.

In the network context, sampling methods are generally categorised into three main classes (Chuong Nguyen 2025):

  • Node-based sampling selects a subset of nodes from the network and retains edges that are incident to the sampled nodes. This method is efficient and is usually implemented in large-scale studies (Ben-Eliezer et al. 2022). It often fails to capture important global structural properties such as connectivity and clustering.

  • Edge-based sampling samples a subset of edges directly and includes the nodes incident to those edges. This method is better at preserving structural patterns (Jiao 2024). However, it may introduce bias towards selecting nodes with higher degrees, resulting in biased sampled data.

  • Exploration-based sampling constructs samples by traversing the network, for example, using random walks or snowball sampling (Goodman 1961). These methods are good at preserving local connectivity and community structure, but are sensitive to the initial seed choice. A densely connected or highly accessible section of the network may get overrepresented. A detailed discussion of exploration-based sampling is beyond the current scope of this work.

The tidgraph package provides a method for sampling the data for a tbl_graph object through a sample_n() function. However, sample_n() has been superseded by slice_sample(), which is the current recommended approach for random sampling. Although the sample_n() function is not expected to be deprecated in the near future, it is currently limited to only critical bug fixes. A further limitation of the tbl_graph object is on stratified sampling, which is not directly supported, requiring converting the tbl_graph object back into a tibble (Müller and Wickham 2025), performing stratified sampling on the node or edge table, and then filtering the original network based on the sampled nodes or edges.

set.seed(1)

full_graph |> 
  activate(nodes) |> 
  sample_n(size = 20)
# A tbl_graph: 20 nodes and 2 edges
#
# A rooted forest with 18 trees
#
# Node Data: 20 × 4 (active)
   name                              long   lat type    
   <chr>                            <dbl> <dbl> <chr>   
 1 10-12 BENDIGO STREET CHELTENHAM   145. -38.0 racf    
 2 131-149 CONDON STREET BENDIGO     144. -36.8 racf    
 3 15 TARWIN STREET WARRAGUL         146. -38.2 racf    
 4 190-200 MCDONALDS ROAD EPPING     145. -37.6 racf    
 5 25 PALMERSTON STREET MARYBOROUGH  144. -37.0 racf    
 6 260 KOOYONG ROAD CAULFIELD        145. -37.9 racf    
 7 29 HEATHFIELD ROAD BRIGHTON EAST  145. -37.9 racf    
 8 297 QUEEN STREET ALTONA MEADOWS   145. -37.9 racf    
 9 31 BLACKBURN ROAD DONCASTER EAST  145. -37.8 racf    
10 54 QUEENS PARADE ASHWOOD          145. -37.9 racf    
11 6 TRINITY DRIVE HORSHAM           142. -36.7 racf    
12 61 ALDER STREET KANGAROO FLAT     144. -36.8 racf    
13 68-72 MACPHERSON STREET NHILL     142. -36.3 racf    
14 89 CROMIE STREET RUPANYUP         143. -36.6 racf    
15 9 HEWETT DRIVE POINT COOK         145. -37.9 racf    
16 CENTRAL HIGHLANDS RURAL HEALTH    144. -37.3 hospital
17 BENALLA HEALTH                    146. -36.6 hospital
18 MANSFIELD DISTRICT HOSPITAL       146. -37.1 hospital
19 ST GEORGE'S HEALTH SERVICE        145. -37.8 hospital
20 MALVERN PRIVATE HOSPITAL          145. -37.9 hospital
#
# Edge Data: 2 × 28
   from    to attendancenum unique_id single_id casedate     age gender
  <int> <int>         <dbl>     <dbl>     <dbl> <date>     <dbl> <chr> 
1    12    16             5     43638  11908064 2021-01-18    87 Male  
2    12    17             1     49283  11295436 2020-06-25    83 Female
# ℹ 20 more variables: locationname <chr>, multiple_racf <dbl>, dispatch <chr>,
#   diagnosis <chr>, casenature <chr>, transportflag <chr>, nept <dbl>,
#   iht <dbl>, routine <chr>, year <dbl>, month <dbl>, day <dbl>,
#   dayweek <chr>, daytype <chr>, age_group <chr>, long_hosp <dbl>,
#   lat_hosp <dbl>, long_racf <dbl>, lat_racf <dbl>, category <chr>
full_graph |> 
  activate(edges) |> 
  sample_n(size = 20)
# A tbl_graph: 815 nodes and 20 edges
#
# A directed acyclic multigraph with 796 components
#
# Edge Data: 20 × 28 (active)
    from    to attendancenum unique_id single_id casedate     age gender
   <int> <int>         <dbl>     <dbl>     <dbl> <date>     <dbl> <chr> 
 1    83   689             1      4151  11544425 2020-09-22    98 Female
 2   534   650             3     16967  10627430 2019-10-29    67 Male  
 3   468   680             1     23143  11454263 2020-08-21    83 Female
 4   378   629             3     25394  11628912 2020-10-22    84 Male  
 5   247   651             1     25465  11200067 2020-05-22    81 Male  
 6   516   706             2     38320  10224700 2019-05-27    89 Male  
 7   385   672             2     40848  10185531 2019-05-25    89 Female
 8   243   649             1     41695  12601268 2021-08-27    88 Female
 9   314   650             6     48336  13418185 2022-05-09    75 Female
10    42   628             3     53947  10654277 2019-11-07    92 Female
11   577   781             1     56290  12600419 2021-08-27    67 Female
12   420   700             1     70170  10389581 2019-08-07    82 Female
13   625   650             1     70615   9781701 2019-01-13    24 Female
14   390   629             2     73536  12895145 2021-11-20    88 Male  
15   236   650             3     75597  12750048 2021-10-13    87 Female
16   345   664             1     76719  11060923 2020-03-25    96 Male  
17    83   689             5     77765  11012878 2020-03-08    90 Female
18   163   660             2     77959  11533876 2020-09-19    82 Female
19   245   628             1     78546   9792437 2019-01-17    61 Female
20    77   638             1     80438  13295619 2022-03-30    83 Male  
# ℹ 20 more variables: locationname <chr>, multiple_racf <dbl>, dispatch <chr>,
#   diagnosis <chr>, casenature <chr>, transportflag <chr>, nept <dbl>,
#   iht <dbl>, routine <chr>, year <dbl>, month <dbl>, day <dbl>,
#   dayweek <chr>, daytype <chr>, age_group <chr>, long_hosp <dbl>,
#   lat_hosp <dbl>, long_racf <dbl>, lat_racf <dbl>, category <chr>
#
# Node Data: 815 × 4
  name                         long   lat type 
  <chr>                       <dbl> <dbl> <chr>
1 1 ABERDEEN STREET RESERVOIR  145. -37.7 racf 
2 1 ADENEY STREET CAMPERDOWN   143. -38.2 racf 
3 1 AITKEN AVENUE DONALD       143. -36.4 racf 
# ℹ 812 more rows
full_graph |> 
  activate(edges) |> 
  sample_n(size = 20) |> 
  activate(nodes) |> 
  filter(!node_is_isolated())
# A tbl_graph: 31 nodes and 20 edges
#
# A directed acyclic multigraph with 14 components
#
# Node Data: 31 × 4 (active)
   name                                   long   lat type 
   <chr>                                 <dbl> <dbl> <chr>
 1 133 CAIRNLEA DRIVE CAIRNLEA            145. -37.8 racf 
 2 15 EMERALD-MONBULK ROAD EMERALD        145. -37.9 racf 
 3 15 WAXMAN PARADE BRUNSWICK WEST        145. -37.8 racf 
 4 16 CORNELL STREET CAMBERWELL           145. -37.8 racf 
 5 197 BENTONS ROAD MORNINGTON            145. -38.2 racf 
 6 27 SMITH STREET HEALESVILLE            146. -37.7 racf 
 7 33 WESTMINSTER DRIVE AVONDALE HEIGHTS  145. -37.8 racf 
 8 37 SLOANE STREET STAWELL               143. -37.1 racf 
 9 400 WAVERLEY ROAD MALVERN EAST         145. -37.9 racf 
10 441 WATERFALL GULLY ROAD ROSEBUD       145. -38.4 racf 
# ℹ 21 more rows
#
# Edge Data: 20 × 28
   from    to attendancenum unique_id single_id casedate     age gender
  <int> <int>         <dbl>     <dbl>     <dbl> <date>     <dbl> <chr> 
1    14    29             5      1915  12533388 2021-08-06    70 Female
2     5    26             3      6589  12707019 2021-09-29    92 Female
3    10    26             2     19067  12279156 2021-05-15   100 Female
# ℹ 17 more rows
# ℹ 20 more variables: locationname <chr>, multiple_racf <dbl>, dispatch <chr>,
#   diagnosis <chr>, casenature <chr>, transportflag <chr>, nept <dbl>,
#   iht <dbl>, routine <chr>, year <dbl>, month <dbl>, day <dbl>,
#   dayweek <chr>, daytype <chr>, age_group <chr>, long_hosp <dbl>,
#   lat_hosp <dbl>, long_racf <dbl>, lat_racf <dbl>, category <chr>
node_kept <- full_graph |> 
  activate(nodes) |> 
  as_tibble() |> 
  group_by(type) |> 
  sample_n(size = 10) |> 
  pull(name)

graph |> 
  filter(name %in% node_kept)
# A tbl_graph: 20 nodes and 10 edges
#
# A rooted forest with 10 trees
#
# Node Data: 20 × 4 (active)
   name                               longitude latitude type    
   <chr>                                  <dbl>    <dbl> <chr>   
 1 1 ABERDEEN STREET RESERVOIR             145.    -37.7 racf    
 2 1-19 YORK STREET GLENROY                145.    -37.7 racf    
 3 101F MAJOR ROAD FAWKNER                 145.    -37.7 racf    
 4 125 MCKEAN STREET BAIRNSDALE            148.    -37.8 racf    
 5 21 DOWNES AVENUE BRIGHTON               145.    -37.9 racf    
 6 28 SURKITT BOULEVARD SALE               147.    -38.1 racf    
 7 359 WARRIGAL ROAD BURWOOD               145.    -37.9 racf    
 8 5 VICTORIA STREET COBDEN                143.    -38.3 racf    
 9 81-83 ARGYLE AVENUE CHELSEA             145.    -38.1 racf    
10 88 HOLMES ROAD MOONEE PONDS             145.    -37.8 racf    
11 EPWORTH RICHMOND                        145.    -37.8 hospital
12 PENINSULA PRIVATE HOSPITAL              145.    -38.2 hospital
13 EPWORTH FREEMASONS                      145.    -37.8 hospital
14 MAROONDAH HOSPITAL                      145.    -37.8 hospital
15 BALLARAT HEALTH SERVICES                144.    -37.6 hospital
16 BRUNSWICK PRIVATE HOSPITAL              145.    -37.8 hospital
17 BROADMEADOWS HEALTH SERVICE             145.    -37.7 hospital
18 HEYWOOD NURSING HOME                    142.    -38.1 hospital
19 COHUNA DISTRICT HOSPITAL                144.    -35.8 hospital
20 ROYAL TALBOT REHABILITATION CENTRE      145.    -37.8 hospital
#
# Edge Data: 10 × 8
   from    to weight long_hosp lat_hosp long_racf lat_racf category
  <int> <int>  <dbl>     <dbl>    <dbl>     <dbl>    <dbl> <chr>   
1     2    11      1      145.    -37.8      145.    -37.7 RACF    
2     3    17      4      145.    -37.7      145.    -37.7 RACF    
3     3    16      2      145.    -37.8      145.    -37.7 RACF    
# ℹ 7 more rows
edges_kept <- full_graph |> 
  activate(edges) |> 
  as_tibble() |> 
  group_by(daytype) |> 
  sample_n(size = 10) |> 
  pull(single_id)

full_graph |> 
  activate(edges) |> 
  filter(single_id %in% edges_kept) |> 
  activate(nodes) |> 
  filter(!node_is_isolated())
# A tbl_graph: 34 nodes and 20 edges
#
# A directed acyclic multigraph with 15 components
#
# Node Data: 34 × 4 (active)
   name                                     long   lat type 
   <chr>                                   <dbl> <dbl> <chr>
 1 107 ANDERSONS CREEK ROAD DONCASTER EAST  145. -37.8 racf 
 2 120 MCCRACKEN STREET ESSENDON            145. -37.7 racf 
 3 124 MACULATA DRIVE SHEPPARTON            145. -36.4 racf 
 4 13 THE STRAND MOONEE PONDS               145. -37.8 racf 
 5 133 CAIRNLEA DRIVE CAIRNLEA              145. -37.8 racf 
 6 15 BON STREET ALEXANDRA                  146. -37.2 racf 
 7 161A CENTRE DANDENONG ROAD CHELTENHAM    145. -38.0 racf 
 8 195 BLUFF ROAD SANDRINGHAM               145. -38.0 racf 
 9 283 COTHAM ROAD KEW                      145. -37.8 racf 
10 352 SYDENHAM ROAD SYDENHAM               145. -37.7 racf 
# ℹ 24 more rows
#
# Edge Data: 20 × 28
   from    to attendancenum unique_id single_id casedate     age gender
  <int> <int>         <dbl>     <dbl>     <dbl> <date>     <dbl> <chr> 
1    19    29           112      3568  10928977 2020-02-08    72 Female
2     8    32             1     19713  10263014 2019-06-22    99 Female
3    18    27             1     20602   9923426 2019-03-07    88 Female
# ℹ 17 more rows
# ℹ 20 more variables: locationname <chr>, multiple_racf <dbl>, dispatch <chr>,
#   diagnosis <chr>, casenature <chr>, transportflag <chr>, nept <dbl>,
#   iht <dbl>, routine <chr>, year <dbl>, month <dbl>, day <dbl>,
#   dayweek <chr>, daytype <chr>, age_group <chr>, long_hosp <dbl>,
#   lat_hosp <dbl>, long_racf <dbl>, lat_racf <dbl>, category <chr>

As discussed in Section 2.1.2, nodes in a network can exist independently without incident edges. Thus, the edge-based sampling does not automatically remove nodes that become isolated after sampling. To remove these nodes, they must be explicitly removed by filtering the node table using the node_is_isolated() function.

Data visualisation

Data visualisation helps reveal patterns, anomalies and relationships that may not be apparent from numerical summaries alone. Network data is often viewed as connections or flows between nodes/locations, and network-based visualisation allows for easier communication to a broader audience. For a simple network without spatial coordinates, placing nodes and edges in a visualisation requires the use of a graph layout algorithm, such as the Kamada-Kawai layout (Kamada and Kawai 1989). Depending on the chosen algorithm, the positions of nodes and edges can be different even on the same network dataset. With spatial information, visualising these becomes more straightforward, as longitude and latitude can be used to specify the actual location of the nodes, with edges represented as lines connecting these locations.

simple_graph |> 
  ggraph(x = long, y = lat) +
  geom_sf(data = vic_map, color = "white") +
  geom_edge_link(alpha = 0.1) +
  geom_node_point(aes(color = category))
Figure 3: An ambulance transfers network in Victoria between residential aged care facilities and hospitals.

Visualising high-dimensional network data can be challenging, especially through a static visualisation alone. The current tool for network visualisation in R is the ggraph package (Pedersen 2024a), which extends the ggplot2 package (Wickham 2016) to support relational data structures such as networks, graphs, and trees. The ggraph package is effective at visualising static networks, offering a range of layout algorithms for placing the node locations while keeping the same familiar ggplot2 syntax. The support for interactive network visualisation with ggraph is currently limited. The reason static network visualisation is hard is that the amount of information that can be mapped to the visualisation is limited within a single figure. As shown in Figure 3, just a simple network representation can already become cluttered quickly. Answering detailed questions such as the number of transfers between a specific RACF and Hospital, or the name of a particular RACF, is difficult using static visualisation alone. Interactive visualisation help with these limitation by layering additional information onto the visualisation, allowing for further exploration.

interactive_vis_node <- simple_graph |> 
  mutate(name = str_remove(name, "'")) |> 
  ggraph(x = long, y = lat) +
  geom_sf(data = vic_map, color = "white") +
  geom_edge_link(alpha = 0.1) +
  geom_point_interactive(aes(x = x, 
                             y = y,
                             color = category,
                             tooltip = name,
                             data_id = name))

girafe(ggobj = interactive_vis_node,
       options = list(
         opts_hover(css = "fill:lightblue;stroke:grey;stroke-width:0.5px"),
         opts_zoom(min = 0.5, max = 3)
       ))
Figure 4: An ambulance transfers network in Victoria between residential aged care facilities and hospitals with an interactive node.
interactive_vis_edge <- simple_graph |> 
  ggraph(x = long, y = lat) +
  geom_sf(data = vic_map, color = "white") +
  geom_node_point(aes(color = category)) +
  geom_segment_interactive(
    data = simple_graph |> activate(edges) |> as_tibble() |> mutate(id = row_number()),
    alpha = 0.2,
    aes(x = long_racf,
        y = lat_racf,
        xend = long_hosp,
        yend = lat_hosp,
        tooltip = weight,
        data_id = id))
  

girafe(ggobj = interactive_vis_edge,
       options = list(
         opts_hover(css = "fill:lightblue;stroke:grey;stroke-width:0.5px"),
         opts_zoom(min = 0.5, max = 3)
       ))
Figure 5: An ambulance transfers network in Victoria between residential aged care facilities and hospitals with an interactive edge.

The ggiraph package (Gohel and Skintzos 2025) provides an interactive element to the visualisation through the ggplot2 extension. Creating interactive network visualisations, therefore, typically requires combining ggraph for layout construction with ggiraph for interactivity. Getting this to work together requires an insight into how ggraph works, which is not a seamless implementation. For example, ggraph provides geom_node_* and geom_edge_* functions for nodes and edges geometry, respectively, but these do not natively support interactivity. To make nodes interactive, geom_point_interactive() need to be use instead of geom_node_point(). Making edges interactive is more complex as it requires the use of geom_segment_interactive() and mapping the start and end coordinates (x, y, xend, yend) for each edge. By that point, if both node and edge need interactivity, then ggraph is not needed, and instead the node and edge can be treated as a different dataset and implement geom_point and geom_segment for drawing the node and edge.

Visual Inference

Part B: Exploratory Analysis of Ambulance Demand and Efficiency

The efficiency of the ambulance transfer is critical in both scheduled and emergency transfer cases to minimise the resources used and affect the patient outcomes. In scheduled transfers, the longer the transfer, the fewer ambulances are available in the system, which potentially limits the number of ambulances available during the peak demand or emergency state. In emergency transfers, it directly influences the outcomes of the patient, especially for time-sensitive conditions such as trauma, cardiac emergencies, and stroke. Analysing ambulance transfer efficiency is therefore crucial for improving the quality of emergency care, ensuring an adequate number of available ambulances, and strengthening the system. In addition, predicting ambulance demand is also important as it allows the services to plan accordingly in different scenarios (e.g. peak demand).

The ambulance transfer data was provided by Alfred Health. The dataset included the following aspects: spatial, temporal, and multivariate information on each transfer. The spatial covers the location of the aged care facilities and the hospital (destination) in latitude and longitude. While the temporal provides the date of the transfers, which cover the period between January 2018 and May 2022. For multivariate information, it covers hospitals, aged care facilities, and patient-level details.

Efficiency

The efficiency of the ambulance transfer is critical in both the case of scheduled and emergency transfer to minimise the use of resources. In the schedules service, the longer the transfer, the fewer ambulances are avaiable in the system, which poentially limits the number of ambulances available during an emergency state. For the emergency case, it directly influences the outcomes of the patient, espcially for time sensitive consitions such as trauma, cardiac emergencies, and stroke. The analysis of the ambulance transfer is therefore crucial for improving the quality of emergency care, ensuring an adequate number of available ambulances, and strengthening the system.

Measuring efficiency can be done in many ways; one of the proxies that can be used for estimating these is the distance from the aged care facilities to hospital. The haversine distance is one that takes into account the curvature of the Earth. However, given the area covered by the dataset, the Euclidean distance will be used instead. It calculates the shortest distance between two points using the latitude and longitude. This measure should give a reasonable estimate for less computing compared to the actual road distance. Note that the limitation is that it ignores the actual street network distance, which is not a straight line, and therefore, the distance between the RACF and the hospital will generally be longer.

Figure 6

From Figure 6, there seems to be zero distance transfer in the data, which might suggest either a data entry error or that the aged care facilities and hospital are next to each other. In the latter case, this might suggest that it may not need the ambulance to transfer the patient. After filtering the distance data to zero and manually going through them, it can be seen that the location of the aged care facility and hospital is, in fact, the same location.

In an emergency case, it is important that the transfer is done quickly. It means that most of the time, the RACF that is right next to the hospital should not have a patient transferred to another hospital. One thing that will need to be considered is that the hospital, which is right next to the RACF, might not be able to handle the emergency case. In this case, the patient should be transferred to another emergency-capable hospital. This information can be verified through the hospital data, which has a column indicating whether the hospital has an emergency department or not.

Based on this information, the efficiency can be improved through fewer transfers to the other hospital that is further away, especially the RACF, whose location is right next to the hospital. To check this, the distance is calculated between the RACF and hospital for all the possible combinations to see which RACF is next to which hospital.

RACF that is close to hospital
dispatch n
APPOINTMENT - PRE BOOKED 388
CLINICIAN-ACTIONED MEDIUM ACUITY EVENT 280
MENTAL HEALTH: ACUTE PROBLEMS 259
AMBULANCE-URGENT WITHIN 25 MINS 239
MENTAL HEALTH: NON URGENT 239
HOSPITAL ADMISSION - ON DAY 219
EMERGENCY DEPT TRANSFER - ON DAY 169
AMBULANCE EMERGENCY MULTILEG 166
DR REQUESTING ATTENDANCE WITHIN 25 MIN 126
RACF that is far from hospital
dispatch n
EMERGENCY DEPT TRANSFER - ON DAY 12942
AMBULANCE-URGENT WITHIN 25 MINS 12604
REFERRAL MEDIUM ACUITY TIMEFRAME SPECIFIED 7329
APPOINTMENT - PRE BOOKED 6745
DR REQUESTING ATTENDANCE WITHIN 25 MIN 5808
NO CONSENT-NOT URGENT/NO ASP 1-HOUR 5283
REFERRAL MEDIUM ACUITY ONE HOUR 4421
RENAL PATIENT TRANSPORT 3826
AMBULANCE-CRITICAL 3692
DR REQUESTING ATTENDANCE WITHIN 90 MINUTES 2633
UNCONSCIOUS/FAINTING, NOT ALERT 2383
NEPT 000 EVENT TO ERTCOMM 1901
CLINICIAN-ACTIONED MEDIUM ACUITY EVENT 1366
BREATHING PROBLEMS: DIFF SPEAKING B/W BREATHS 1362
UNCONSCIOUS/FAINTING, UNCONSCIOUS - EFFECTIVE BREATHING 1081
APPOINTMENT - ON DAY 874
CHEST PAIN: BREATHING NORMALLY >35 861
NEPT BOOKED EVENT TO ERTCOMM 824
HOSPITAL ADMISSION - PRE BOOKED 787
CHEST PAIN: DIFF SPEAKING B/W BREATHS 768
BREATHING PROBLEMS: NOT ALERT 762
HOSPITAL ADMISSION - ON DAY 699
CHEST PAIN: CLAMMY 671
REFERRAL LOW ACUITY TIMEFRAME SPECIFIED 639
FALLS, POSSIBLY DANGEROUS BODY AREA (ON THE GROUND OR FLOOR) 622
Figure 7

The expectation of the transfer distance for the RACF that is close to the hospital would be, on average, less than that of the other case. However, from Figure 7, it can be seen that, on average, the transfer distance for the RACF that is next to the hospital is higher. It actually raises more questions about why this is the case.

Figure 8
Figure 9

From Figure 8, it can be observed that a lot of patients got transferred from the regional to the Melbourne area. Though visualising this can be hard on the map because the Melbourne area is smaller than the regional area, therefore, a lot of points inside the Melbourne area will get squished together, which makes it hard to visualise. One of the solutions is to group the hospitals within Melbourne together by their emergency capabilities.

Figure 10
Figure 11

The question is why these RACFs, which are right next to the hospital, have to transfer the patient to the hospital that is further away. From the summarising process, there is a repeated distance which might suggest that there is a common hospital that RACF likes to use, or there might be a common symptom that this is the closest hospital that can treat it.

Transfer Distance

To further analyse the common reason for the patient transfer (RACF next to Hospital), the transfer distance will be grouped into the following;

  • Zero distance (RACF and Hospital that is co-located)

  • Between 0 and 10km (Short-distance)

  • Between 10km and 50km (Medium-distance)

  • Above 50km (Long-distance)

Dispatch Reason
Zero Distance
dispatch n
AMBULANCE-URGENT WITHIN 25 MINS 18
AMBULANCE-CRITICAL 10
DR REQUESTING ATTENDANCE WITHIN 25 MIN 9
MENTAL HEALTH: ACUTE PROBLEMS 7
NEPT 000 EVENT TO ERTCOMM 6
NEPT BOOKED EVENT TO ERTCOMM 6
CLINICIAN-ACTIONED MEDIUM ACUITY EVENT 5
DR REQUESTING ATTENDANCE WITHIN 90 MINUTES 5
Short Distance
dispatch n
AMBULANCE-URGENT WITHIN 25 MINS 88
DR REQUESTING ATTENDANCE WITHIN 25 MIN 72
CLINICIAN-ACTIONED MEDIUM ACUITY EVENT 51
EMERGENCY DEPT TRANSFER - ON DAY 47
NO CONSENT-NOT URGENT/NO ASP 1-HOUR 31
AMBULANCE-CRITICAL 30
UNCONSCIOUS/FAINTING, NOT ALERT 21
REFERRAL MEDIUM ACUITY TIMEFRAME SPECIFIED 19
REFERRAL MEDIUM ACUITY ONE HOUR 14
DR REQUESTING ATTENDANCE WITHIN 90 MINUTES 12
MENTAL HEALTH: ACUTE PROBLEMS 12
DR REQUESTING ATTENDANCE WITHIN 1 HR 11
BREATHING PROBLEMS: DIFF SPEAKING B/W BREATHS 10
MENTAL HEALTH: NON URGENT 10
CHEST PAIN: BREATHING NORMALLY >35 9
CHEST PAIN: DIFF SPEAKING B/W BREATHS 9
NEPT 000 EVENT TO ERTCOMM 8
Medium Distance
dispatch n
MENTAL HEALTH: NON URGENT 116
MENTAL HEALTH: ACUTE PROBLEMS 95
AMBULANCE EMERGENCY MULTILEG 80
AMBULANCE-URGENT WITHIN 25 MINS 78
EMERGENCY DEPT TRANSFER - ON DAY 61
CLINICIAN-ACTIONED MEDIUM ACUITY EVENT 53
NEPT BOOKED EVENT TO ERTCOMM 50
AMBULANCE-CRITICAL 32
NEPT 000 EVENT TO ERTCOMM 32
NO CONSENT-NOT URGENT/NO ASP 1-HOUR 26
DR REQUESTING ATTENDANCE WITHIN 25 MIN 24
DR REQUESTING ATTENDANCE WITHIN 90 MINUTES 17
NON EMERGENCY MULTILEG 13
Long Distance
dispatch n
CLINICIAN-ACTIONED MEDIUM ACUITY EVENT 171
MENTAL HEALTH: ACUTE PROBLEMS 145
MENTAL HEALTH: NON URGENT 110
AMBULANCE EMERGENCY MULTILEG 85
CLINICIAN-ACTIONED LOW ACUITY EVENT 57
EMERGENCY DEPT TRANSFER - ON DAY 57
AMBULANCE-URGENT WITHIN 25 MINS 55
NON EMERGENCY MULTILEG 42
NEPT BOOKED EVENT TO ERTCOMM 39
HELICOPTER EVENT: PICK UP 32
AMBULANCE NOT URGENT WITHIN 1-HOUR 31
AMBULANCE-CRITICAL 24
DR REQUESTING ATTENDANCE WITHIN 25 MIN 21
NEPT 000 EVENT TO ERTCOMM 21
NO CONSENT-NOT URGENT/NO ASP 1-HOUR 21
MENTAL HEALTH - EMERGENCY DEPT TRANSFER 15
DR REQUESTING ATTENDANCE WITHIN 90 MINUTES 11
Diagnosis Reason
Zero Distance
diagnosis n
PAIN 12
FRACTURE/S 10
OTHER - SPECIFY 10
NO PROBLEM IDENTIFIED 9
PSYCHIATRIC EPISODE 9
SEPSIS 7
LACERATION 6
CHEST INFECTION 5
Short Distance
diagnosis n
PAIN 78
OTHER - SPECIFY 52
SEPSIS 30
FEBRILE 26
ALTERED CONSCIOUS STATE 21
FRACTURE/S 20
INFECTION - OTHER / NOT LISTED 18
SHORT OF BREATH 18
HYPOTENSION 17
ARRHYTHMIA 16
LACERATION 16
NO PROBLEM IDENTIFIED 16
SEIZURE/S / CONVULSION/S 16
Medium Distance
diagnosis n
PSYCHIATRIC EPISODE 174
OTHER - SPECIFY 84
PAIN 81
SUICIDAL IDEATION 62
FRACTURE/S 49
UNKNOWN PROBLEM 35
NO PROBLEM IDENTIFIED 29
STROKE 19
CHEST INFECTION 17
LACERATION 17
DEPRESSION 13
CONFUSION 12
EMOTIONAL DISTRESS 12
BOWEL OBSTRUCTION 11
BRUISING / HAEMATOMA 11
HEAD INJURY 10
Long Distance
diagnosis n
PSYCHIATRIC EPISODE 175
OTHER - SPECIFY 138
PAIN 90
SUICIDAL IDEATION 73
FRACTURE/S 59
ACUTE CORONARY SYNDROME 48
UNKNOWN PROBLEM 34
INFECTION - OTHER / NOT LISTED 29
NO PROBLEM IDENTIFIED 23
STROKE 21
LACERATION 19
ARRHYTHMIA 14
BOWEL OBSTRUCTION 14
GASTROINTESTINAL PROBLEM 14
SEPSIS 14
CHEST INFECTION 13
RENAL CALCULI / COLIC 13
EMOTIONAL DISTRESS 12
SHORT OF BREATH 12

From the table, the dispatch and diagnosis reasons seem to point to the same thing, which is that for the shorter distance, the reason seems to be about the injuries that require quick transfer, while the medium to long-distance suggests mental health issues. It is expected that the emergency transfer that requires quick attention should be done quickly.

Figure 12

Project 2: Dynamics Infectious Disease Modelling using a Generalised Ambulance Model

This project focuses on understanding the impact of any changes in the ambulance transfer network affect the spread of infectious diseases, particularly among older populations in residential aged care facilities (RACFs). Ambulance transfer create a way in which infections can be transmitted throughout facilities and hospitals. Variations in transfer demand, routing strategies, or operational constraints can alter the structure of the network and, in turn, influence outbreak dynamics.

Infectious disease dynamics describe how the disease is spread and evolves within the population over time. These dynamics depend on the contact between individuals or groups, movement between locations, and the timing of infection and recovery. Traditional compartmental models, such as susceptible-infectious-recovered (SIR) or susceptible-exposed-infectious-recovered (SEIR), are often used to represent the disease progression within and between groups.

To capture the interaction between ambulance demand, transfer allocation, and infectious disease transmission on a dynamic network, this project proposes a three-step modelling framework.

Step 1: Modelling Ambulance Demand

Ambulance demand is modelled using a spatio-temporal point process, where each event represents a case requiring transfer between a residential aged care facility and hospital (Zhou et al. 2015).

Step 2: Ambulance Allocation and Network Construction

Given the simulated demand, a deterministic or stochastic allocation method is applied to determine how calls are distributed across hospitals in Victoria. The real-world transfer patterns are observed through exploratory data analysis of the collected transfer data. The transfer allocation defines a network linking RACFs and hospitals.

Step 3: Infectious Disease Dynamics on the Transfer Network

The generated ambulance transfer network is then used as input to an infectious disease transmission model. It allows the disease to spread within facilities (RACFs and hospitals) and between the facilities through ambulance transfers.

Timeline

References

Ben-Eliezer, Omri, Talya Eden, Joel Oren, and Dimitris Fotakis. 2022. “Sampling Multiple Nodes in Large Networks: Beyond Random Walks.” In Proceedings of the Fifteenth ACM International Conference on Web Search and Data Mining, 37–47.
Butts, Carter T. 2008. “Network: A Package for Managing Relational Data in r.” Journal of Statistical Software 24 (2). https://doi.org/10.18637/jss.v024.i02.
Cardenas, Nicolas Cespedes, Kimberly VanderWaal, Flávio Pereira Veloso, Jason Onell Ardila Galvis, Marcos Amaku, and Jose HH Grisi-Filho. 2021. “Spatio-Temporal Network Analysis of Pig Trade to Inform the Design of Risk-Based Disease Surveillance.” Preventive Veterinary Medicine 189: 105314.
Chuong Nguyen, Quoc. 2025. “Network Sampling: An Overview and Comparative Analysis.” arXiv e-Prints, arXiv–2504.
Csárdi, Gábor, Tamás Nepusz, Vincent Traag, Szabolcs Horvát, Fabio Zanini, Daniel Noom, and Kirill Müller. 2026. igraph: Network Analysis and Visualization in r. https://doi.org/10.5281/zenodo.7682609.
Fernández-Gracia, Juan, Jukka-Pekka Onnela, Michael L Barnett, Vı́ctor M Eguı́luz, and Nicholas A Christakis. 2017. “Influence of a Patient Transfer Network of US Inpatient Facilities on the Incidence of Nosocomial Infections.” Scientific Reports 7 (1): 2930.
Gohel, David, and Panagiotis Skintzos. 2025. Ggiraph: Make ’Ggplot2’ Graphics Interactive. https://doi.org/10.32614/CRAN.package.ggiraph.
Goodman, Leo A. 1961. “Snowball Sampling.” The Annals of Mathematical Statistics, 148–70.
Harmsen, AMK, Georgios F Giannakopoulos, Patrick R Moerbeek, Elise P Jansma, HJ Bonjer, and Frank W Bloemers. 2015. “The Influence of Prehospital Time on Trauma Patients Outcome: A Systematic Review.” Injury 46 (4): 602–9.
Harris, Anthony, and Anurag Sharma. 2018. “Estimating the Future Health and Aged Care Expenditure in Australia with Changes in Morbidity.” PloS One 13 (8): e0201697.
Jiao, Bo. 2024. “Sampling Unknown Large Networks Restricted by Low Sampling Rates.” Scientific Reports 14 (1): 13340.
Kamada, Tomihisa, and Satoru Kawai. 1989. “An Algorithm for Drawing General Undirected Graphs.” Information Processing Letters 31 (1): 7–15. https://doi.org/https://doi.org/10.1016/0020-0190(89)90102-6.
Kearney, Anne R, and Daniel Winterbottom. 2006. “Nearby Nature and Long-Term Care Facility Residents: Benefits and Design Recommendations.” Journal of Housing for the Elderly 19 (3-4): 7–28.
Müller, Kirill, and Hadley Wickham. 2025. Tibble: Simple Data Frames. https://doi.org/10.32614/CRAN.package.tibble.
Parohan, Mohammad, Sajad Yaghoubi, Asal Seraji, Mohammad Hassan Javanbakht, Payam Sarraf, and Mahmoud Djalali. 2020. “Risk Factors for Mortality in Patients with Coronavirus Disease 2019 (COVID-19) Infection: A Systematic Review and Meta-Analysis of Observational Studies.” The Aging Male 23 (5): 1416–24.
Pebesma, Edzer. 2018. Simple Features for R: Standardized Support for Spatial Vector Data.” The R Journal 10 (1): 439–46. https://doi.org/10.32614/RJ-2018-009.
Pedersen, Thomas Lin. 2024a. Ggraph: An Implementation of Grammar of Graphics for Graphs and Networks. https://doi.org/10.32614/CRAN.package.ggraph.
———. 2024b. Tidygraph: A Tidy API for Graph Manipulation. https://CRAN.R-project.org/package=tidygraph.
Rao, K Venkateswara, A Govardhan, and KV Chalapati Rao. 2012. “Spatiotemporal Data Mining: Issues, Tasks and Applications.” International Journal of Computer Science and Engineering Survey 3 (1): 39.
van der Meer, Lucas, Lorena Abad, Andrea Gilardi, and Robin Lovelace. 2024. Sfnetworks: Tidy Geospatial Networks. https://luukvdmeer.github.io/sfnetworks/.
Wang, Earo, Dianne Cook, and Rob J Hyndman. 2020. “A New Tidy Data Structure to Support Exploration and Modeling of Temporal Data.” Journal of Computational and Graphical Statistics 29 (3): 466–78. https://doi.org/10.1080/10618600.2019.1695624.
Wickham, Hadley. 2014. “Tidy Data.” Journal of Statistical Software 59 (10): 1–23. https://doi.org/10.18637/jss.v059.i10.
———. 2016. Ggplot2: Elegant Graphics for Data Analysis. Springer-Verlag New York. https://ggplot2.tidyverse.org.
Wickham, Hadley, Romain François, Lionel Henry, Kirill Müller, and Davis Vaughan. 2023. Dplyr: A Grammar of Data Manipulation. https://doi.org/10.32614/CRAN.package.dplyr.
Zhou, Zhengyi, David S Matteson, Dawn B Woodard, Shane G Henderson, and Athanasios C Micheas. 2015. “A Spatio-Temporal Point Process Model for Ambulance Demand.” Journal of the American Statistical Association 110 (509): 6–15.